/**
 * Project  : Looker
 * Package  : net.freestu.looker.util
 * File     : HashUtils.java
 * Author   : solosky < solosky772@qq.com >
 * Date     : Aug 28, 2009
 * Modified : Aug 28, 2009
 * License  : Apache License 2.0 
 */
package net.freestu.looker.util;

/**
 *  编号工具
 */
public class HashUtils
{
	/**
	 * 计算一个URL的hash值
	 * 结果为64BIT+16BIT的整数，这里转换为字符串返回
	 * 不用MD5是为了效率的考虑,数据库和索引在处理字符串时很慢
	 * 计算的方法很简单，MD5产生的是32个十六进制的字符，这里取低16位直接转换为64BIT的整数
	 * 最后取高4个字符转换为16BIT的字符，这里主要是解决冲突
	 * 返回的格式为64BIT-16BIT
	 * @param url
	 * @return
	 */
	/*
	public static String hash(String url)
	{
		String md5 = MD5.calcMD5(url);
		//截取低15个字符转换为整数
		long h1 = Long.parseLong(md5.substring(16,31), 16);
		//截取高4为转化为整数
		int h2 = Integer.parseInt(md5.substring(0,4), 16);
		
		return Long.toString(h1)+'-'+Integer.toString(h2); 
	}*/
	
	/**
	 * 截取低15位转化为整数
	 * @param url
	 * @return
	 */
	
	public static String longHash(String url)
	{
		if(url==null)
			return null;
		String md5 = MD5.calcMD5(url);
		//截取低15个字符转换为整数
		long h1 = Long.parseLong(md5.substring(16,31), 16);
		return Long.toString(h1);
	}
	
	/**
	 * 截取高4位转化为整数
	 * @param url
	 * @return
	 */
	public static String shortHash(String url)
	{
		String md5 = MD5.calcMD5(url);
		//截取高4为转化为整数
		int h2 = Integer.parseInt(md5.substring(0,4), 16);
		return Integer.toString(h2);
	}
	
	/**
	 * 计算MD5值
	 */
	public static String fullHash(String url)
	{
		return MD5.calcMD5(url);
	}
}
